package com.macro.mall.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.macro.mall.common.api.CommonPageQuery;
import com.macro.mall.dto.PmsProductCategoryDto;
import com.macro.mall.dto.PmsProductCategoryParam;
import com.macro.mall.dto.PmsProductCategoryTreeItemDto;
import com.macro.mall.dto.PmsProductCategoryWithChildrenItemDto;
import com.macro.mall.model.pms.PmsProductCategoryDO;
import com.macro.mall.model.pms.PmsProductCategoryQuery;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 商品分类管理Service
 * Created by macro on 2018/4/26.
 */
public interface PmsProductCategoryService  extends IService<PmsProductCategoryDO> {
    /**
     * 创建商品分类
     */
    @Transactional
    int create(PmsProductCategoryParam pmsProductCategoryParam);

    /**
     * 修改商品分类
     */
    @Transactional
    int update(Long id, PmsProductCategoryParam pmsProductCategoryParam);

    /**
     * 分页获取商品分类
     */
    Page<PmsProductCategoryDto> getList(Page<PmsProductCategoryDO> page, PmsProductCategoryQuery param);

    /**
     * 删除商品分类
     */
    int delete(Long id);

    /**
     * 根据ID获取商品分类
     */
    PmsProductCategoryDO getItem(Long id);

    /**
     * 批量修改导航状态
     */
    int updateNavStatus(List<Long> ids, Integer navStatus);

    /**
     * 批量修改显示状态
     */
    int updateShowStatus(List<Long> ids, Integer showStatus);

    /**
     * 以层级形式获取商品分类
     */
    List<PmsProductCategoryWithChildrenItemDto> listWithChildren();

    /**
     * 列表所有分类树
     * @return 返回所有分类树结构
     */
    List<PmsProductCategoryTreeItemDto> listAllCategoryTree();

    /**
     * 列表所有分类树
     * @return 返回所有分类树结构
     */
    List<PmsProductCategoryTreeItemDto> listAllCategoryTreeWithAttributeConfig();
}
